Закрыть окно
Список других документов ПЭВМ "Агат"
'021B' -
.шп0; устанавливает размер экранного окна в полную экранную страницу. Кроме того устанавливаются стандартные векторы ввода/выводы (ячейки ¤10-¤13) и включается текущая текстовая страница. В зависимости от значения старшего бита в ячейке 'CiHfOPMAciOHHyj bufEP
DRN EQU ¤90 TCAT EQU ¤91 SCAT EQU ¤92 SHIFT EQU ¤93 TLIST EQU ¤94 SLIST EQU ¤95 SHLIST EQU ¤96 STATUS EQU ¤97 TSLBUF EQU ¤98 BUFF EQU ¤99 LENGTH EQU ¤9A (9B) ISCHAN EQU ¤9C NBLOCK EQU ¤9D (9E) BYTE EQU ¤9F EOF EQU ¤A0 NAME EQU ¤A1
;
; ' отладчика. После выхода из подпрограммы в ячейках PC и PC+1 будет находиться адрес следующей команды.
.шп2
'0221' -
.шп0; делает почти тоже самое что и предыдущая с той лишь разницей, что выдает не одну команду, а бесконечный листинг, также как директива 'L' отладчика. Начальный адрес тоже должен находиться в ячейках PC и PC+1.
.шп2
'0224' -
.шп0; выделяет из входной строки числовой параметр. Входной строкой является буфер ввода 'IN' текущую позицию в котором индексирует регистр 'Y', указывающий на очередной символ строки. Подпрограмма считывает все цифры числа (незначащие нули опускаются) вплоть до символа не являющегося цифрой. При выходе из подпрораммы в аккумуляторе будет находиться символ преобразованный из входного следующей подпрограммой:
========================================= D2D7: 49 B0 433 ПРОВЦИФ EOR #¤B0 D2D9: C9 0A 434 CMP #¤A D2DB: 90 07 435 BCC ПРОВЦИФ1 D2DD: 69 88 436 ADC #¤88 D2DF: C9 FA 437 CMP #¤FA D2E1: B0 01 438 BCS ПРОВЦИФ1 D2E3: 60 439 RTS D2E4: 29 0F 440 ПРОВЦИФ1 AND #¤F D2E6: 38 441 SEC D2E7: 60 442 RTS =========================================
.сс
Эта подпрограмма проверяет является ли очередной символ строки цифрой. Именно она преобразовывает символы не являющиеся цифрами в некоторые коды, значения которых можно всегда определить воспользовавшись этой подпрограммой.
Подпрограмма выделения числа помещает прочитанное число в ячейки A2, A2+1. Кроме того если ячейка MODE имеет нулевое значение полученное число копируется в ячейки A1, A1+1 и A3, A3+1.
.шп2
'0227' -
.шп0; выводит на устройство значение аккумулятора в виде байта, состоящего из двух шестнадцатиричных цифр.
.шп2
'022A' -
.шп0; выводит на устройство значение аккумулятора в виде одной шестнадцатиричной цифры.
.шп2
'022D' -
.шп0; вводит с клавиатуры один символ, без формирования на экране курсора.
.шп2
'0230' -
.шп0; устанавливает вертикальную позицию курсора. Новая вертикальная позиция помещается в аккум*>>> ByzOB RWTS
CALLRTS CLC -~TEHiE DFB BIT2 CALLWTS SEC -zApiCx CALLRWTS STA TRACK STY SECTOR LDA BUFT,X STA BUFFER LDA BUFT+1,X STA BUFFER+1 LDA #0 ADC #1 STA ACTION JSR RWTS BCC RTS0 JMPER1 JMP (ERRVECT) A=ERR
* емой обрабатываются внешние программы расположенные в файле типа 'S'. Структура этого файла проста. В первом секторе распологаются начальные данные программы. Это ¤80 байт (вторая половина сектора не используется), которые после выполнения команды '[BOOT' разместятся в области ¤580-¤5FF. Начиная со второго сектора идет уже сама программа, и эти сектора будут расположены последовательно с адреса ¤D000-¤FFFF в странице псевдо-ПЗУ включаемой командой STA ¤CX21. Максимальный размер программы может быть соответственно 12 Кбайт, если не считать одной оговорки. В старших адресах памяти ¤FFFA-¤FFFF размещены системные векторы процессора, для реакции на различные прерывания. После загрузки эти векторы устнавливаются системой, и при возникновении прерывания (например сброса) сбоя в работе системы не произойдет, она лишь инициализирует некотрые переменные и выйдет в диалог с отладчиком. Но если Ваша программа будет занимать все 12 Кбайт и в конце не будут установлены требуемые адреса реакции на прерывания, может произойти зависание системы. Поэтому в случае максимального размера внешней программы при ее запуске скопируйте значения векторов из страницы псевдо-ПЗУ ¤CX20 в ¤CX21, или установите требуемые адреса непосредственно в своей программе.
.шп3
8.6. Структура загрузочного диска системы.
.шп0
Думается, что некоторым пользователям захочется поглубже закопаться в систему, поэтому чтобы облегчить их труд я привожу информацию о расположении системы на диске и после загрузки в память. На нулевом треке системного диска находится загрузчик, который выдает на экран заставку, и загружает всю систему. Кроме того загрузчик обеспечивает запуск системы, подготавливая все нужные для этого данные, и производит вход в отладчик. Загрузчик считывает информацию сразу со всего трека, т.е. заполняет за один шаг область объемом 4 Кбайт. Это справедливо и для MFM накопителей - у них также задействованы только 16 секторов, а оставшиеся пять на каждом треке системы объявлены во VTOCе свободными и поэтому в них может производиться запись информации. Загружается система в следующем порядке:
.сс
========================== Трек | Банк | Адрес -----+-------+------------ 1 | ¤CX20 | ¤D000-¤DFFF 2 | ¤CX20 | ¤E000-¤EFFF 3 | ¤CX20 | ¤F000-¤FFFF 4 | ¤CX60 | ¤D000-¤DFFF 5 | ¤CX61 | ¤D000-¤DFFF 6 | ¤CX21 | ¤D000-¤DFFF 7 | ¤CX21 | ¤E000-¤EFFF 8 | ¤CX21 | ¤F000-¤FFFF ==========================
Приблизительное расположение модулей системы будет приведено ниже. Точных адресов Вы там не найдете (делать распечатки с каждой версии системы автор не имеет возможности, т.к. это занимает более 200 страниц), но приблизительно оценить что где будет намного легче.
===============================================================
Банк | Адрес | Содержимое
------+-------+------------------------------------------------
¤CX20 | ¤D000 | Подпрограммы ввода/вывода: Драйвер НГМД ЕС 5088
| | -//- : Работа с клавиатурой
| | -//- : Работа с экраном
| | -//- : Работа с принтером
| | Отладчик
| | Командный процессор ДОС
| | Подпрограммы файловой системы
| |
¤CX60 | ¤D000 | Экранный редактор памяти
| | Экранный секторный редактор
| | Драйвер MFM накопителей
| |
¤CX61 | ¤D000 | Подпрограмма вывода сообщений
| | Текстовые сообщения системы
| ¤D800 | Хранится программа копирования дисков
| |
¤CX21 | ¤D000 | Внешняя резA #¤26
STA ¤32
PLA
JSR COUT
INX
BNE GET1
GET2 JSR BELL
JMP GET1
BS CPX #0
BEQ GET2
DEX
LDA #¤26
STA ¤32
LDA #<BS1
LDY #>BS1
JSR PRINT
JMP GET1
GET3 CPX #0
BEQ GETLN
STA ¤200,X
RTS
UPR ASC "glABHOE B HA{EM dElE - upOPCTBO
"
NEXTS ASC "
O{ibKA! TR= "
NEXTU ASC ", pOpPObuEM E}E PAz "
WRPRS ASC "
diCK zAKPyT HA zApiCx
"
ENDS ASC "
BOT My EgO i PAzMETili...
"
NAM ASC "
iMq diCKA>